
const Controller = require('egg').Controller;

// 定义请求接口的请求参数规则
const queryRule = {
  createBy: { type: "string", required: false },
  createTime: { type: "string", required: false },
  noticeContent: { type: "string", required: false },
  noticeId: { type: "string", required: false },
  noticeTitle: { type: "string", required: false },
  noticeType: { type: "string", required: false },
  remark: { type: "string", required: false },
  status: { type: "string", required: false },
  updateBy: { type: "string", required: false },
  updateTime: { type: "string", required: false },
};

/**
 * @Controller 通知公告
 */
class SysNoticeController extends Controller {
  /**
   * 普通分页查询
   * @param {*} ctx
   */
  /**
   * @summary 通知公告表查询  
   * @description 通知公告表查询  
   * @Router get /system/notice/list
   * @request query string pageNum 页码 默认 1
   * @request query string pageSize 单页数量 默认 10
   * @request query string createBy 创建者
   * @request query string createTime 创建时间
   * @request query string noticeContent 公告内容
   * @request query string noticeId 公告ID
   * @request query string noticeTitle 公告标题
   * @request query string noticeType 公告类型（1通知 2公告）
   * @request query string remark 备注
   * @request query string status 公告状态（0正常 1关闭）
   * @request query string updateBy 更新者
   * @request query string updateTime 更新时间
   * @response 200 SystemNoticeList 操作成功
   */
  async list(ctx) {
    ctx.validate(queryRule, ctx.request.query);
    ctx.body = await ctx.service.system.sysNotice.list(ctx.request.query);
    ctx.status = 200;
  }

  /**
   * 获取列表数据
   * @param {*} ctx
   */
  async allList(ctx) {
    ctx.body = await ctx.service.system.sysNotice.allList(ctx.request.query);
    ctx.status = 200;
  }

  
  
  /**
   * 删除
   * @param {*} ctx
   */
  /**
   * @summary 通知公告表删除  
   * @description 通知公告表删除  
   * @Router delete /system/notice/{noticeId}
   * @response 200   操作成功
   */
  async delete(ctx) {
    ctx.body = await ctx.service.system.sysNotice.delete(ctx.params.noticeId);
    ctx.status = 200;
  }

  /**
   * 更新
   * @param {*} ctx
   */
  /**
   * @summary 通知公告表修改  
   * @description 通知公告表修改  
   * @Router put /system/notice
   * @response 200   操作成功
   */
  async update(ctx) {
    ctx.body = await ctx.service.system.sysNotice.update(ctx.request.body);
    ctx.status = 200;
  }

  /**
   * 获取详情
   * @param {*} ctx
   */
  /**
   * @summary 通知公告表详情  
   * @description 通知公告表详情  
   * @Router get /system/notice/{noticeId}
   * @request query string createBy 创建者
   * @request query string createTime 创建时间
   * @request query string noticeContent 公告内容
   * @request query string noticeId 公告ID
   * @request query string noticeTitle 公告标题
   * @request query string noticeType 公告类型（1通知 2公告）
   * @request query string remark 备注
   * @request query string status 公告状态（0正常 1关闭）
   * @request query string updateBy 更新者
   * @request query string updateTime 更新时间
   * @response 200   操作成功
   */
  async detail(ctx) {
    ctx.validate(queryRule, ctx.request.query);
    ctx.body = await ctx.service.system.sysNotice.detail(ctx.params.noticeId);
    ctx.status = 200;
  }

  /**
   * 创建
   * @param {*} ctx
   */
  /**
   * @summary 通知公告表新增  
   * @description 通知公告表新增  
   * @Router post /system/notice
   * @response 200   操作成功
   */
  async create(ctx) {
    ctx.body = await ctx.service.system.sysNotice.create(ctx.request.body);
    ctx.status = 200;
  }

  async downLoad(ctx){
    let data = await ctx.service.system.sysNotice.select(
      ctx.request.body,
      "new"
    );
    
    

    let downLoadModule = ctx.model.SysNotice.fieldRawAttributesMap;
    let columnData = [];
    for (var key in downLoadModule) {
      columnData.push({
        header: downLoadModule[key].comment,
        key: ctx.underlineToHump(key),
        width: 15,
      });
    }
    if (data.code == 200) {
      await ctx.service.exportExcel.publicDownLoad(columnData, data.data);
    } else {
      ctx.body = data;
      ctx.status = 200;
    }
  }
}

module.exports = SysNoticeController;
    